<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    /* 强制类型转换：编程人员通过编写代码对数据类型进行转换
       隐式类型转换：不是编程人员可以去转化的，而是浏览器（js解析引擎）
       帮我们自动转换的 */

    // 将其他类型转换为布尔类型 Boolean()
    console.log(Boolean(0));        // false
    console.log(Boolean(""));       // false 字符串为空就是false
    console.log(Boolean(" "));      // true  字符串不为空就是true
    console.log(Boolean(undefined));// false
    console.log(Boolean(null));     // false
    console.log(Boolean(NaN));      // false
    console.log(Boolean(false));    // false
    var a = {
        name: "sam"
    };
    console.log(Boolean(a));      // true
    // 只要是对象类型值,无论是否为空都为true
    // 其他非零数字，布尔类型转换都是true

    // 将其他类型转换为数值类型 Number()  parseInt()  parseFloat()
    var str = "10.666";
    console.log(Number(str));       // 转换成数字
    console.log(Number(true));      // 1
    console.log(Number(false));     // 0
    console.log(Number(""));        // 0
    console.log(Number("asd"));     // NaN  ：not a number
    console.log(Number(undefined)); // NaN  ：not a number
    console.log(Number(null));      // 0
    console.log(Number(a));         // NaN

    console.log(parseInt(str));     // 转换成整数 10,小数点后的自动舍弃
    console.log(parseInt('123abc'));// 123 数字后非数字内容舍弃
    console.log(parseInt('abc123'));// NaN 
    console.log(parseInt(null));    // NaN 
    console.log(parseInt(true));    // NaN
    console.log(parseInt(false));   // NaN
    console.log(parseInt(a));       // NaN

    console.log(parseFloat(str));   // 转换成小数 10.666,最多只能保留到小数点后16位
    console.log(parseFloat(1.1234567891234567898));

    // 利用隐式转换将字符串转换成number
    // +会把数值型转换成字符串，其余的运算符会把字符串转换成数值
    console.log(1 - "abc");           // NaN
    console.log(11 - "1");            // 10
    console.log('11' - "1");          // 10
    console.log(true+"125"-100+"100.25Hello");
    /* 使用isNaN函数检测是否为非数字值
    不是数字值返回位true，是数字值返回为false */
    console.log(isNaN('ab'));       // true
    console.log(isNaN('12'));       // false
    console.log(isNaN(12));         // false
    console.log(isNaN(null));       // false
    console.log(isNaN(''));         // false
    console.log(isNaN(true));       // false
    console.log(isNaN(NaN));        // true
    // console.log(Number("100.25Hello"));         // NaN
</script>

</html>